<?php
namespace Sfsn\Core\Schema;

class Schema
{
    // 预定义16种抽象字段类型
    const TYPE_PK = 'pk';
    const TYPE_BIGPK = 'bigpk';
    const TYPE_STRING = 'string';
    const TYPE_TEXT = 'text';
    const TYPE_SMALLINT = 'smallint';
    const TYPE_INTEGER = 'integer';
    const TYPE_BIGINT = 'bigint';
    const TYPE_FLOAT = 'float';
    const TYPE_DECIMAL = 'decimal';
    const TYPE_DATETIME = 'datetime';
    const TYPE_TIMESTAMP = 'timestamp';
    const TYPE_TIME = 'time';
    const TYPE_DATE = 'date';
    const TYPE_BINARY = 'binary';
    const TYPE_BOOLEAN = 'boolean';
    const TYPE_MONEY = 'money';
   
    
    public function string($column,$value)
    {
        // 如果类型符合则直接返回
        if (is_string($value)) {
            return $value;
        }
        // 如果默认值是null则转义返回
        if (is_null($column->defaultValue)) {
            $return = (string) $value;
        }
        // 返回默认值
        return $column->defaultValue;
    }
   
    public function integer($column,$value){        
        // 如果类型符合则直接返回
        if (is_numeric($value)) {
            return $value;
        }
        // 如果默认值是null则转义返回
        if (is_null($column->defaultValue)) {
            $return = (int) $value;
        }
        // 返回默认值
        return $column->defaultValue;
    }
    public function double($column,$value)
    {
        // 如果类型符合则直接返回
        if (is_numeric($value)) {
            return $value;
        }
        // 如果默认值是null则转义返回
        if (is_null($column->defaultValue)) {
            $return = (double) $value;
        }
        // 返回默认值
        return $column->defaultValue;
    }
    public function boolean($column,$value)
    {
        return $value ? 1 : 0;
    }
    public function resource($column,$value)
    {
        return is_resource($value) ? $value : (string) $value;
    }
    
//     public $schemaType = [
//         'TINYINT' => 'int',
//         'SMALLINT' => 'int',
//         'MEDIUMINT' => 'int',
//         'INT' => 'int',
//         'BIGINT' => 'int',
        
//         'FLOAT' => 'float',
//         'DOUBLE' => 'double',
//         'REAL' => 'real',
//         'DECIMAL' => 'float',
        
//         'DATE' => 'string',
//         'DATETIME' => 'string',
//         'TIMESTAMP' => 'string',
//         'TIME' => 'string',
//         'YEAR' => 'int',
        
//         'CHAR' => 'string',
//         'VARCHAR' => 'string',
//         'BINARY' => 'string',
//         'VARBINARY' => 'string',
        
//         'TINYBLOB' => 'string',
//         'BLOB' => 'string',
//         'MEDIUMBLOB' => 'string',
//         'LONGBLOB' => 'string',
        
//         'TINYTEXT' => 'string',
//         'TEXT' => 'string',
//         'MEDIUMTEXT' => 'string',
//         'LONGTEXT' => 'string',
        
//         'ENUM' => 'string',
//         'SET' => 'string'
//     ];

    /**
     * 字段属性
     * 
     * @var unknown
     */
//     public $field = [];

    /**
     * 字段类型
     * 
     * @var unknown
     */
//     public $schema = [];

//     public function schema($type)
//     {
//         $column = [];
//         if (preg_match('/^(\w+)(?:\(([^\)]+)\))?/', $type, $matches)) {
//             $type = strtoupper($matches[1]);
//             // if (!empty($matches[2])) {
//             // $column['scale'] = $matches[2];
//             // }
//             // if($column['type']=='ENUM' || $column['type']=='SET'){
//             // $column['enumvalue'] =
//             // }
            
//             if ($type === 'ENUM' || $type == 'SET') {
//                 $values = explode(',', $matches[2]);
//                 foreach ($values as $i => $value) {
//                     $values[$i] = trim($value, "'");
//                 }
//                 $column['enumValues'] = $values;
                
//                 // 如果不是枚举类型，那么括号中的内容就是精度了，如 decimal(19,4)
//             } else {
//                 $values = explode(',', $matches[2]);
//                 $column['size'] = (int) $values[0];
//                 if (isset($values[1])) {
//                     $column['scale'] = (int) $values[1];
//                 }
                
//                 // bit(1) 类型的，转换成 boolean
//                 if ($column['size'] === 1 && $type === 'BIT') {
//                     $type = 'boolean';
//                 } elseif ($type === 'bit') {
//                     // 由于bit最多64位，如果超过 32 位，那么用一个 bigint 足以。
//                     if ($column['size'] > 32) {
//                         $type = 'INT';
//                         // 如果正好32位，那么用一个 interger 来表示。
//                     } elseif ($column['size'] === 32) {
//                         $type = 'BIGINT';
//                     }
//                 }
//             }
//         }
//         return $column;
//     }

//     public function field($field, $value)
//     {
//         $this->field = $field;
//         $schema = $this->schema($field['type']);
//         $action = '_' . $this->schemaType[$schema['type']];
//         return self::$action($value);
//     }

   

}

